﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using PMisuseAn.io;

namespace PMisuseAn
{
    /// <summary>
    /// Interaction logic for AddImpliedFromToAttributeWindow.xaml
    /// </summary>
    public partial class AddImpliedFromToAttributeWindow : Window
    {
    //    private AddActorAttributeWindow aatw_;
    //    private AddImpliedFromToAttributeWindow aiftaw_;
               
    //    public Attribute source_attribute;
    //    public Attribute implied_attribute;

    //    public Attribute x_attribute;

    //    public string relation_type;
    //    public AddImpliedFromToAttributeWindow aiftawn;
    //    string attName;

    //    List<string> containedimplications;
    //    public List<string> containedaggregations;

    //    public AddImpliedFromToAttributeWindow(AddActorAttributeWindow aatw, Attribute source_att)
    //    {
    //        InitializeComponent();
    //        aatw_ = aatw;
    //        source_attribute = source_att;
    //        implied_attribute = new Attribute();
    //        implied_attribute.clusterName = MainWindow.clusterName;

    //        reloadAttInComboBox();
    //        reloadAttTypeOfComboBox();

    //        if (AddActorAttributeWindow.isActorCall == false)
    //        {
    //            yes_p_rd.IsChecked = false;
    //            yes_p_rd.IsEnabled = false;
    //            no_p_rd.IsChecked = false;
    //            no_p_rd.IsEnabled = false;
    //        }
    //    }

    //    public AddImpliedFromToAttributeWindow(AddImpliedFromToAttributeWindow aiftaw, Attribute source_att)
    //    //public AddImpliedFromToAttributeWindow( Attribute source_att)
    //    {
    //        InitializeComponent();
    //        aiftaw_ = aiftaw;
    //        implied_attribute = new Attribute();
    //        implied_attribute.clusterName = MainWindow.clusterName;
    //        source_attribute = source_att;

    //        reloadAttInComboBox();
    //        reloadAttTypeOfComboBox();

    //        if (AddActorAttributeWindow.isActorCall == false)
    //        {
    //            yes_p_rd.IsChecked = false;
    //            yes_p_rd.IsEnabled = false;
    //            no_p_rd.IsChecked = false;
    //            no_p_rd.IsEnabled = false;
    //        }
    //    }


    //    private void implied_from_to_b_Click(object sender, RoutedEventArgs e)
    //    {
    //        if (imp_att_name_cb.Text == null)
    //        {
    //            MessageBox.Show("Missing attribute name...", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        else if (imp_att_name_cb.Text.Trim().Equals(""))
    //        {
    //            MessageBox.Show("Missing attribute name...", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        else if (allPrimaryCompsSelected() == false)
    //        {
    //            MessageBox.Show("unchecked property!", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        string advice = checkConflictingRelationAdvice();
    //        if (advice.Length > 0)
    //        {
    //            MessageBox.Show(this, "Selected implied relation is contradicting with \n" +
    //            "already existing relation in " + source_attribute.name + "\n\n" + advice,
    //            "Conflict", MessageBoxButton.OK, MessageBoxImage.Information);

    //            return;
    //        }

    //        if (implied_attribute == null)
    //        {
    //            implied_attribute = new Attribute();
    //            implied_attribute.clusterName = MainWindow.clusterName;
    //        }

    //        //attName = imp_att_name_cb.Text;
    //       // attName = imp_att_name_cb.SelectedItem.ToString();
    
    //        attName = null;
    //        if (imp_att_name_cb.SelectedItem != null)
    //        {
    //            attName = imp_att_name_cb.SelectedItem.ToString();
    //        }
    //        else
    //        {
    //            attName = imp_att_name_cb.Text;
    //        }

    //        //attName = imp_att_name_cb.Text;

    //        //if (attName == null || attName.Equals(""))
    //        //{
    //        //    attName = imp_att_name_cb.SelectedItem.ToString();
    //        //}

    //        attName = attName.Trim();
    //        attName = attName.TrimEnd('\n');
    //        attName = attName.TrimEnd('\r');

    //        string description = att_description.Text;
    //        description = description.TrimEnd('\n');
    //        description = description.TrimEnd('\r');

    //        string literal_t = "";
    //        if (string_l.IsChecked == true)
    //        {
    //            literal_t = "[string]";
    //        }
    //        else if (numeric_l.IsChecked == true)
    //        {
    //            literal_t = "[numeric]";
    //        }
    //        else if (boolean_l.IsChecked == true)
    //        {
    //            literal_t = "[boolean]";
    //        }

    //        string category_t = "";
    //        if (categoryAgent.IsChecked == true)
    //        {
    //            category_t = "agentAttribute";
    //        }
    //        else if (categoryEnvironmental.IsChecked == true)
    //        {
    //            category_t = "environmentalAttribute";
    //        }
    //        else if (categoryFunctional.IsChecked == true)
    //        {
    //            category_t = "functionalAttribute";
    //        }

    //        bool isPrivate_a;
    //        if (yes_p_rd.IsChecked == true)
    //        {
    //            isPrivate_a = true;
    //        }
    //        else
    //        {
    //            isPrivate_a = false;
    //        }

    //        bool personallyIdentifiable_a;
    //        if (per_id_rd_y.IsChecked == true)
    //        {
    //            personallyIdentifiable_a = true;
    //        }
    //        else
    //        {
    //            personallyIdentifiable_a = false;
    //        }

    //        if (implied_attribute == null)
    //        {
    //            implied_attribute = new Attribute();
    //            implied_attribute.clusterName = MainWindow.clusterName;
    //        }
    //        implied_attribute.name = attName;
    //        implied_attribute.description = description;
    //        implied_attribute.literalType = literal_t;
    //        implied_attribute.isPrivate = isPrivate_a;
    //        implied_attribute.personallyIdentifiable = personallyIdentifiable_a;
    //        implied_attribute.category = category_t;                      

    //        if (bi_directional_rb.IsChecked == true)
    //        {
    //            this.relation_type = "<biDirectional>"; //symmetric
    //        }
    //        else if (source_target_bi_directional_rb.IsChecked == true)
    //        {
    //            this.relation_type = "<uniDirectionalSourceToTarget>";
    //        }
    //        else if (target_source_bi_directional_rb.IsChecked == true)
    //        {
    //            this.relation_type = "<uniDirectionalTargetToSource>";
    //        }

    //        if (implied_attribute != null)
    //        {
    //            switch (this.relation_type)
    //            {
    //                case "<biDirectional>":
    //                    source_attribute.addSymmetry(implied_attribute);
    //                    break;
    //                case "<uniDirectionalSourceToTarget>":
    //                    source_attribute.addImpliedTo(implied_attribute);
    //                    break;
    //                case "<uniDirectionalTargetToSource>":
    //                    source_attribute.addImpliedFrom(implied_attribute);
    //                    break;
    //            }
    //        }
    //        //imp_att_name_cb.IsEditable = false;
    //        imp_att_name_cb.IsEnabled = false;
    //        //att_description.IsEnabled = false;

    //        MisUseAnObjectsDB.addAttributeDB(implied_attribute, MainWindow.clusterName);//intermediary attribute addition

    //        //aiftawn = new AddImpliedFromToAttributeWindow(implied_attribute);

    //        if (containedimplications == null)
    //        {
    //            containedimplications = new List<string>();
    //        }
    //        if (containedaggregations == null)
    //        {
    //            containedaggregations = new List<string>();
    //        }
    //        aiftawn = new AddImpliedFromToAttributeWindow(this,implied_attribute);
    //        aiftawn.Title = "Implied attributes properties: (" + implied_attribute.name + ")";
    //        aiftawn.Owner = (Window)this.Parent;
    //        aiftawn.ShowDialog();
    //    }

    //    private void impliedAttsOk_Click(object sender, RoutedEventArgs e)
    //    {
    //        if (imp_att_name_cb.Text == null)
    //        {
    //            MessageBox.Show("Missing attribute name...", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        else if (imp_att_name_cb.Text.Trim().Equals(""))
    //        {
    //            MessageBox.Show("Missing attribute name...", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        else if (allPrimaryCompsSelected() == false)
    //        {
    //            MessageBox.Show("unchecked property!", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        string advice = checkConflictingRelationAdvice();
    //        if (advice.Length > 0)
    //        {
    //            MessageBox.Show(this, "Selected implied relation is contradicting with \n" +
    //            "already existing relation in " + source_attribute.name + "\n\n" + advice,
    //            "Conflict", MessageBoxButton.OK, MessageBoxImage.Information);

    //            return;
    //        }
    //        if (implied_attribute == null)
    //        {
    //            implied_attribute = new Attribute();
    //            implied_attribute.clusterName = MainWindow.clusterName;
    //        }

    //        //attName = imp_att_name_cb.Text;
    //        //attName = imp_att_name_cb.SelectedItem.ToString();

    //        attName = null;
    //        if (imp_att_name_cb.SelectedItem != null)
    //        {
    //            attName = imp_att_name_cb.SelectedItem.ToString();
    //        }
    //        else
    //        {
    //            attName = imp_att_name_cb.Text;
    //        }

    //        //attName = imp_att_name_cb.Text;

    //        //if (attName == null || attName.Equals(""))
    //        //{
    //        //    attName = imp_att_name_cb.SelectedItem.ToString();
    //        //}

    //        attName = attName.Trim();
    //        attName = attName.TrimEnd('\n');
    //        attName = attName.TrimEnd('\r');

    //        string description = att_description.Text;
    //        description = description.TrimEnd('\n');
    //        description = description.TrimEnd('\r');

    //        string literal_t = "";
    //        if (string_l.IsChecked == true)
    //        {
    //            literal_t = "[string]";
    //        }
    //        else if (numeric_l.IsChecked == true)
    //        {
    //            literal_t = "[numeric]";
    //        }
    //        else if (boolean_l.IsChecked == true)
    //        {
    //            literal_t = "[boolean]";
    //        }

    //        string category_t = "";
    //        if (categoryAgent.IsChecked == true)
    //        {
    //            category_t = "agentAttribute";
    //        }
    //        else if (categoryEnvironmental.IsChecked == true)
    //        {
    //            category_t = "environmentalAttribute";
    //        }
    //        else if (categoryFunctional.IsChecked == true)
    //        {
    //            category_t = "functionalAttribute";
    //        }

    //        bool isPrivate_a;
    //        if (yes_p_rd.IsChecked == true)
    //        {
    //            isPrivate_a = true;
    //        }
    //        else
    //        {
    //            isPrivate_a = false;
    //        }

    //        bool personallyIdentifiable_a;
    //        if (per_id_rd_y.IsChecked == true)
    //        {
    //            personallyIdentifiable_a = true;
    //        }
    //        else
    //        {
    //            personallyIdentifiable_a = false;
    //        }

    //        implied_attribute.name = attName;
    //        implied_attribute.description = description;
    //        implied_attribute.literalType = literal_t;
    //        implied_attribute.isPrivate = isPrivate_a;
    //        implied_attribute.personallyIdentifiable = personallyIdentifiable_a;
    //        implied_attribute.category = category_t;

    //        //MisUseAnObjectsDB.addAttributeDB(implied_attribute);//intermediary attribute addition
                        
    //        if (bi_directional_rb.IsChecked == true)
    //        {
    //           this.relation_type = "<biDirectional>"; //symmetric
    //        }
    //        else if (source_target_bi_directional_rb.IsChecked == true)
    //        {
    //            this.relation_type = "<uniDirectionalSourceToTarget>";
    //        }
    //        else if (target_source_bi_directional_rb.IsChecked == true)
    //        {
    //            this.relation_type = "<uniDirectionalTargetToSource>";
    //        }                       
            
    //        if (implied_attribute != null)
    //        {
    //            switch (this.relation_type)
    //            {
    //                case "<biDirectional>":
    //                    source_attribute.addSymmetry(implied_attribute);
    //                    break;
    //                case "<uniDirectionalSourceToTarget>":
    //                    source_attribute.addImpliedTo(implied_attribute);
    //                    break;
    //                case "<uniDirectionalTargetToSource>":
    //                    source_attribute.addImpliedFrom(implied_attribute);
    //                    break;
    //            }
    //        }

    //        //MisUseAnObjectsDB.loadAggregateAttributes(source_attribute);
    //        //reloadAggregationList(source_attribute);

    //        Attribute iter = source_attribute;                
    //        if (aiftaw_ != null)
    //         {                   
    //            //aiftaw_.implied_from_listBox.Items.Clear();

    //            //add bi-directional (symmetry) items to implied_from_listBox   
    //            if (iter !=null && iter.symmetry.Count > 0)
    //            {
    //                X(iter);
    //                Y(iter);
    //                Z(iter);
    //            }

    //            //add uni-directional (X->Y) items to implied_from_listBox 
    //            if (iter != null && iter.implied_to.Count > 0)
    //            {
    //                X(iter);
    //                Y(iter);
    //                Z(iter);
    //            }

    //            //add uni-directional (Y->X) items to implied_from_listBox  
    //            if (iter != null && iter.implied_from.Count > 0)
    //            {
    //                X(iter);
    //                Y(iter);
    //                Z(iter);
    //            }

    //            //add bi-directional (symmetry) items to implied_from_listBox   
    //            if (iter != null && iter.symmetry_inv.Count > 0)
    //            {
    //                XInv(iter);
    //                YInv(iter);
    //                ZInv(iter);
    //            }

    //            //add uni-directional (X->Y) items to implied_from_listBox 
    //            if (iter != null && iter.implied_to_inv.Count > 0)
    //            {
    //                XInv(iter);
    //                YInv(iter);
    //                ZInv(iter);
    //            }

    //            //add uni-directional (Y->X) items to implied_from_listBox  
    //            if (iter != null && iter.implied_from_inv.Count > 0)
    //            {
    //                XInv(iter);
    //                YInv(iter);
    //                ZInv(iter);
    //            }
    //         }             

    //        //update main source interface
    //        if (aatw_ != null)
    //        {                
    //            //aatw_.implied_from_listBox.Items.Clear();

    //            Attribute iter_s = aatw_.source_attribute;
    //            //symmetric relations
    //            if (iter != null && iter_s.symmetry.Count > 0)
    //            {
    //                XM(iter_s);
    //                YM(iter_s);
    //                ZM(iter_s);
    //            }
                 

    //            //uni-directional relations (X->Y)
    //            if (iter != null && iter_s.implied_to.Count > 0)
    //            {
    //                XM(iter_s);
    //                YM(iter_s);
    //                ZM(iter_s);
    //            }

    //            //uni-directional relations (Y->X)
    //            if (iter != null && iter_s.implied_from.Count > 0)
    //            {
    //                XM(iter_s);
    //                YM(iter_s);
    //                ZM(iter_s);
    //            }

    //            //symmetric relations
    //            if (iter != null && iter_s.symmetry_inv.Count > 0)
    //            {
    //                XMInv(iter_s);
    //                YMInv(iter_s);
    //                ZMInv(iter_s);
    //            }


    //            //uni-directional relations (X->Y)
    //            if (iter != null && iter_s.implied_to_inv.Count > 0)
    //            {
    //                XMInv(iter_s);
    //                YMInv(iter_s);
    //                ZMInv(iter_s);
    //            }

    //            //uni-directional relations (Y->X)
    //            if (iter != null && iter_s.implied_from_inv.Count > 0)
    //            {
    //                XMInv(iter_s);
    //                YMInv(iter_s);
    //                ZMInv(iter_s);
    //            }
    //        }
    //        //close
    //        this.Close();
    //    }

    //    private void Z(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.implied_to)
    //        {
    //            if (!iter.name.Equals(impatt.name))
    //            {
    //                string s_str = iter.name + " → " + impatt.name;
    //                //bool contained = aiftaw_.implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in aiftaw_.containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    aiftaw_.containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_impliedTo_Checked));
    //                    aiftaw_.implied_from_listBox.Items.Add(cb);
    //                }

    //                MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //                foreach (string ss in iter.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aiftaw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aiftaw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                        aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                    }
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aiftaw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aiftaw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                        aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                    }
    //                }

    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter = impatt;
    //                    X(iter);
    //                }
    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Y(iter);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Z(iter);
    //                }

    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    XInv(iter);
    //                }
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    YInv(iter);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    ZInv(iter);
    //                }
    //            }

    //        }
    //    }

    //    private void ZInv(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.implied_to_inv)
    //        {
    //            string s_str = impatt.name + " → " + iter.name;
    //            //bool contained = aiftaw_.implied_from_listBox.Items.Contains(s_str);
    //            bool contained = false;
    //            foreach (string implication in aiftaw_.containedimplications)
    //            {
    //                if (implication.Equals(s_str))
    //                {
    //                    contained = true;
    //                    break;
    //                }
    //            }
    //            if (contained == false)
    //            {
    //                aiftaw_.containedimplications.Add(s_str);

    //                CheckBox cb = new CheckBox();
    //                cb.Tag = s_str;
    //                cb.Content = s_str;
    //                cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_impliedTo_Checked));
    //                aiftaw_.implied_from_listBox.Items.Add(cb);
    //            }

    //            MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //            foreach (string ss in iter.aggregation_statements)
    //            {
    //                bool contained_ = false;
    //                foreach (string aggregation in aiftaw_.containedaggregations)
    //                {
    //                    if (aggregation.Equals(ss))
    //                    {
    //                        contained_ = true;
    //                        break;
    //                    }
    //                }
    //                if (contained_ == false)
    //                {
    //                    aiftaw_.containedaggregations.Add(ss);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = ss;
    //                    cb.Content = ss;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                    aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                }
    //            }
    //            MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //            foreach (string ss in impatt.aggregation_statements)
    //            {
    //                bool contained_ = false;
    //                foreach (string aggregation in aiftaw_.containedaggregations)
    //                {
    //                    if (aggregation.Equals(ss))
    //                    {
    //                        contained_ = true;
    //                        break;
    //                    }
    //                }
    //                if (contained_ == false)
    //                {
    //                    aiftaw_.containedaggregations.Add(ss);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = ss;
    //                    cb.Content = ss;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                    aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                } 
    //            }

    //            if (impatt.implied_from.Count > 0)
    //            {
    //                iter = impatt;
    //                X(iter);
    //            }
    //            if (impatt.symmetry.Count > 0)
    //            {
    //                iter = impatt;
    //                Y(iter);
    //            }
    //            if (impatt.implied_to.Count > 0)
    //            {
    //                iter = impatt;
    //                Z(iter);
    //            }

    //            if (impatt.implied_from_inv.Count > 0)
    //            {
    //                iter = impatt;
    //                XInv(iter);
    //            }
    //            if (impatt.symmetry_inv.Count > 0)
    //            {
    //                iter = impatt;
    //                YInv(iter);
    //            }
    //            if (impatt.implied_to_inv.Count > 0)
    //            {
    //                iter = impatt;
    //                ZInv(iter);
    //            }
    //        }
    //    }

    //    private void Y(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.symmetry)
    //        {
    //            if (!iter.name.Equals(impatt.name))
    //            {
    //                string s_str = iter.name + " ↔ " + impatt.name;
    //                //bool contained = aiftaw_.implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in aiftaw_.containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    aiftaw_.containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_symmetry_Checked));
    //                    aiftaw_.implied_from_listBox.Items.Add(cb);
    //                }

    //                MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //                foreach (string ss in iter.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aiftaw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aiftaw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                        aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aiftaw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aiftaw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                        aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter = impatt;
    //                    X(iter);
    //                }
    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Y(iter);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Z(iter);
    //                }

    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    XInv(iter);
    //                }
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    YInv(iter);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    ZInv(iter);
    //                }
    //            }

    //        }
    //    }

    //    private void YInv(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.symmetry_inv)
    //        {
    //            if (!iter.name.Equals(impatt.name))
    //            {
    //                string s_str = impatt.name + " ↔ " + iter.name;
    //                //bool contained = aiftaw_.implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in aiftaw_.containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    aiftaw_.containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_symmetry_Checked));
    //                    aiftaw_.implied_from_listBox.Items.Add(cb);
    //                }

    //                MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //                foreach (string ss in iter.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aiftaw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aiftaw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                        aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                    }                     
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aiftaw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aiftaw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                        aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter = impatt;
    //                    X(iter);
    //                }
    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Y(iter);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Z(iter);
    //                }

    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    XInv(iter);
    //                }
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    YInv(iter);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    ZInv(iter);
    //                }
    //            }
    //        }
    //    }

    //    private void X(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.implied_from)
    //        {
    //            if (!iter.name.Equals(impatt.name))
    //            {
    //                string s_str = impatt.name + " → " + iter.name;
    //                //bool contained = aiftaw_.implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in aiftaw_.containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    aiftaw_.containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_impliedFrom_Checked));
    //                    aiftaw_.implied_from_listBox.Items.Add(cb);
    //                }

    //                MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //                foreach (string ss in iter.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aiftaw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aiftaw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                        aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                    }
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aiftaw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aiftaw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                        aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                    }
    //                }

    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter = impatt;
    //                    X(iter);
    //                }
    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Y(iter);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Z(iter);
    //                }

    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    XInv(iter);
    //                }
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    YInv(iter);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    ZInv(iter);
    //                }
    //            }
    //        }
    //    }

    //    private void XInv(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.implied_from_inv)
    //        {
    //            if (!iter.name.Equals(impatt.name))
    //            {
    //                string s_str = iter.name + " → " + impatt.name;
    //                //bool contained = aiftaw_.implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in aiftaw_.containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    aiftaw_.containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_impliedFrom_Checked));
    //                    aiftaw_.implied_from_listBox.Items.Add(cb);
    //                }

    //                MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //                foreach (string ss in iter.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aiftaw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aiftaw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                        aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aiftaw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aiftaw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aiftaw_.del_aggregation_Checked));
    //                        aiftaw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter = impatt;
    //                    X(iter);
    //                }
    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Y(iter);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Z(iter);
    //                }

    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    XInv(iter);
    //                }
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    YInv(iter);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    ZInv(iter);
    //                }
    //            }

    //        }
    //    }

    //    private void Zthis(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.implied_to)
    //        {
    //            if (!iter.name.Equals(impatt.name))
    //            {
    //string s_str = iter.name + " → " + impatt.name;
    //                //bool contained = implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_impliedTo_Checked));
    //                    implied_from_listBox.Items.Add(cb);
    //                }                
                
    //                MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //                foreach (string ss in iter.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Xthis(iter);
    //                }
    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Ythis(iter);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Zthis(iter);
    //                }

    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    XthisInv(iter);
    //                }
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    YthisInv(iter);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    ZthisInv(iter);
    //                }
    //            }                
    //        }
    //    }

    //    private void ZthisInv(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.implied_to_inv)
    //        {
    //            if (!iter.name.Equals(impatt.name))
    //            {
    // string s_str = impatt.name + " → " + iter.name;
    //                //bool contained = implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_impliedTo_Checked));
    //                    implied_from_listBox.Items.Add(cb);
    //                }

    //                MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //                foreach (string ss in iter.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Xthis(iter);
    //                }
    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Ythis(iter);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Zthis(iter);
    //                }

    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    XthisInv(iter);
    //                }
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    YthisInv(iter);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    ZthisInv(iter);
    //                }
    //            }
               
    //        }
    //    }

    //    private void Ythis(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.symmetry)
    //        {
    //            if (!iter.name.Equals(impatt.name))
    //            {
    // string s_str = iter.name + " ↔ " + impatt.name;
    //                //bool contained = implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_symmetry_Checked));
    //                    implied_from_listBox.Items.Add(cb);
    //                }
                
    //                MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //                foreach (string ss in iter.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Xthis(iter);
    //                }
    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Ythis(iter);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Zthis(iter);
    //                }

    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    XthisInv(iter);
    //                }
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    YthisInv(iter);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    ZthisInv(iter);
    //                }
    //            }
               
    //        }
    //    }

    //    private void YthisInv(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.symmetry_inv)
    //        {
    //            if (!iter.name.Equals(impatt.name))
    //            {
    //                string s_str = impatt.name + " ↔ " + iter.name;
    //                //bool contained = implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_symmetry_Checked));
    //                    implied_from_listBox.Items.Add(cb);
    //                }

    //                MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //                foreach (string ss in iter.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Xthis(iter);
    //                }
    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Ythis(iter);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Zthis(iter);
    //                }

    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    XthisInv(iter);
    //                }
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    YthisInv(iter);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    ZthisInv(iter);
    //                }
    //            }
                
    //        }
    //    }

    //    private void Xthis(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.implied_from)
    //        {
    //            if (!iter.name.Equals(impatt.name))
    //            {
    //                string s_str = impatt.name + " → " + iter.name;
    //                //bool contained = implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_impliedFrom_Checked));
    //                    implied_from_listBox.Items.Add(cb);
    //                }                

    //                MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //                foreach (string ss in iter.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Xthis(iter);
    //                }
    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Ythis(iter);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Zthis(iter);
    //                }

    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    XthisInv(iter);
    //                }
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    YthisInv(iter);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    ZthisInv(iter);
    //                }
    //            }
                
    //        }
    //    }

    //    private void XthisInv(Attribute iter)
    //    {
    //        foreach (Attribute impatt in iter.implied_from_inv)
    //        {
    //            if (!iter.name.Equals(impatt.name))
    //            {
    //                string s_str = iter.name + " → " + impatt.name;
    //                //bool contained = implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_impliedFrom_Checked));
    //                    implied_from_listBox.Items.Add(cb);
    //                }

    //                MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //                foreach (string ss in iter.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                        att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Xthis(iter);
    //                }
    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Ythis(iter);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter = impatt;
    //                    Zthis(iter);
    //                }

    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    XthisInv(iter);
    //                }
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    YthisInv(iter);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter = impatt;
    //                    ZthisInv(iter);
    //                }
    //            }
    //        }
    //    }

    //    private void del_impliedTo_Checked(object sender, RoutedEventArgs e)
    //    {
    //        CheckBox d_cb = (CheckBox)sender;
    //        string tag_id = (string)d_cb.Tag;

    //        MessageBoxResult result = MessageBox.Show(this, "delete " + tag_id,
    //                        "Confirm delete", MessageBoxButton.YesNo,
    //                        MessageBoxImage.Information);

    //        if (result == MessageBoxResult.No)
    //        {
    //            d_cb.IsChecked = false;
    //        }
    //        else
    //        {
    //            string[] imp_atts = tag_id.Split('→');
    //            string att_name = imp_atts[0].Trim();
    //            string implied_to_att = imp_atts[1].Trim();

    //            for (int i = 0; i < implied_attribute.implied_to.Count; i++)
    //            {
    //                if (implied_attribute.implied_to[i].name.Equals(implied_to_att))
    //                {
    //                    implied_attribute.implied_to.RemoveAt(i);
    //                    break;
    //                }
    //            }
    //            MisUseAnObjectsDB.deleteImpliedToWithAttribute(att_name, implied_to_att, MainWindow.clusterName);
    //            reloadImpliedFromToList(implied_attribute);
    //        }
    //    }

    //    private void del_symmetry_Checked(object sender, RoutedEventArgs e)
    //    {
    //        CheckBox d_cb = (CheckBox)sender;
    //        string tag_id = (string)d_cb.Tag;

    //        MessageBoxResult result = MessageBox.Show(this, "delete " + tag_id,
    //                        "Confirm delete", MessageBoxButton.YesNo,
    //                        MessageBoxImage.Information);

    //        if (result == MessageBoxResult.No)
    //        {
    //            d_cb.IsChecked = false;
    //        }
    //        else
    //        {
    //            string[] sym_atts = tag_id.Split('↔');
    //            string att_name = sym_atts[0].Trim();
    //            string symmetry_att = sym_atts[1].Trim();

    //            for (int i = 0; i < implied_attribute.symmetry.Count; i++)
    //            {
    //                if (implied_attribute.symmetry[i].name.Equals(symmetry_att))
    //                {
    //                    implied_attribute.symmetry.RemoveAt(i);
    //                    break;
    //                }
    //            }
    //            MisUseAnObjectsDB.deleteSymmetryWithAttribute(att_name, symmetry_att, MainWindow.clusterName);
    //            reloadImpliedFromToList(implied_attribute);
    //        }
    //    }

    //    private void del_impliedFrom_Checked(object sender, RoutedEventArgs e)
    //    {
    //        CheckBox d_cb = (CheckBox)sender;
    //        string tag_id = (string)d_cb.Tag;

    //        MessageBoxResult result = MessageBox.Show(this, "delete " + tag_id,
    //                        "Confirm delete", MessageBoxButton.YesNo,
    //                        MessageBoxImage.Information);

    //        if (result == MessageBoxResult.No)
    //        {
    //            d_cb.IsChecked = false;
    //        }
    //        else
    //        {
    //            string[] imp_atts = tag_id.Split('→');
    //            string att_name = imp_atts[1].Trim();
    //            string implied_from_att = imp_atts[0].Trim();

    //            for (int i = 0; i < implied_attribute.implied_from.Count; i++)
    //            {
    //                if (implied_attribute.implied_from[i].name.Equals(implied_from_att))
    //                {
    //                    implied_attribute.implied_from.RemoveAt(i);
    //                    break;
    //                }
    //            }
    //            MisUseAnObjectsDB.deleteImpliedFromWithAttribute(att_name, implied_from_att, MainWindow.clusterName);
    //            reloadImpliedFromToList(implied_attribute);
    //        }
    //    }

    //    private void ZM(Attribute iter_s)
    //    {
    //        foreach (Attribute impatt in iter_s.implied_from)
    //        {
    //            if (!iter_s.name.Equals(impatt.name))
    //            {
    //                string s_str = impatt.name + " → " + iter_s.name;
    //                //bool contained = aatw_.implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in aatw_.containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    aatw_.containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_impliedFrom_Checked));
    //                    aatw_.implied_from_listBox.Items.Add(cb);
    //                }      
    //                MisUseAnObjectsDB.loadAggregateAttributes(iter_s, MainWindow.clusterName);
    //                foreach (string ss in iter_s.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    }                     
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }       

    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XM(iter_s);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YM(iter_s);
    //                }
    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZM(iter_s);
    //                }

    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XMInv(iter_s);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YMInv(iter_s);
    //                }
    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZMInv(iter_s);
    //                }
    //            }
                
    //        }
    //    }

    //    private void ZMInv(Attribute iter_s)
    //    {
    //        foreach (Attribute impatt in iter_s.implied_from_inv)
    //        {
    //            if (!iter_s.name.Equals(impatt.name))
    //            {
    //                string s_str = iter_s.name + " → " + impatt.name;
    //                //bool contained = aatw_.implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in aatw_.containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    aatw_.containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_impliedFrom_Checked));
    //                    aatw_.implied_from_listBox.Items.Add(cb);
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(iter_s, MainWindow.clusterName);
    //                foreach (string ss in iter_s.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XM(iter_s);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YM(iter_s);
    //                }
    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZM(iter_s);
    //                }

    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XMInv(iter_s);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YMInv(iter_s);
    //                }
    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZMInv(iter_s);
    //                }
    //            }

    //        }
    //    }

    //    private void YM(Attribute iter_s)
    //    {
    //        foreach (Attribute impatt in iter_s.implied_to)
    //        {
    //            if (!iter_s.name.Equals(impatt.name))
    //            {
    //                string s_str = iter_s.name + " → " + impatt.name;
    //                //bool contained = aatw_.implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in aatw_.containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    aatw_.containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_impliedTo_Checked));
    //                    aatw_.implied_from_listBox.Items.Add(cb);
    //                }      
    //                if (contained == false)
    //                {
    //                    aatw_.implied_from_listBox.Items.Add(s_str);
    //                }

    //                MisUseAnObjectsDB.loadAggregateAttributes(iter_s, MainWindow.clusterName);
    //                foreach (string ss in iter_s.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    }  
    //                }

    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XM(iter_s);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YM(iter_s);
    //                }
    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZM(iter_s);
    //                }

    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XMInv(iter_s);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YMInv(iter_s);
    //                }
    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZMInv(iter_s);
    //                }
    //            }

    //        }
    //    }

    //    private void YMInv(Attribute iter_s)
    //    {
    //        foreach (Attribute impatt in iter_s.implied_to_inv)
    //        {
    //            if (!iter_s.name.Equals(impatt.name))
    //            {
    //                string s_str = impatt.name + " → " + iter_s.name;
    //                //bool contained = aatw_.implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in aatw_.containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    aatw_.containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_impliedTo_Checked));
    //                    aatw_.implied_from_listBox.Items.Add(cb);
    //                }
    //                if (contained == false)
    //                {
    //                    aatw_.implied_from_listBox.Items.Add(s_str);
    //                }

    //                MisUseAnObjectsDB.loadAggregateAttributes(iter_s, MainWindow.clusterName);
    //                foreach (string ss in iter_s.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XM(iter_s);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YM(iter_s);
    //                }
    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZM(iter_s);
    //                }

    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XMInv(iter_s);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YMInv(iter_s);
    //                }
    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZMInv(iter_s);
    //                }
    //            }
                
    //        }

    //    }

    //    private void XM(Attribute iter_s)
    //    {
    //        foreach (Attribute impatt in iter_s.symmetry)
    //        {
    //            if (!iter_s.name.Equals(impatt.name))
    //            {
    //                string s_str = iter_s.name + " ↔ " + impatt.name;
    //                //bool contained = aatw_.implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in aatw_.containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    aatw_.containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_symmetry_Checked));
    //                    aatw_.implied_from_listBox.Items.Add(cb);
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(iter_s, MainWindow.clusterName);
    //                foreach (string ss in iter_s.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    }  
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    } 
    //                }

    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XM(iter_s);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YM(iter_s);
    //                }
    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZM(iter_s);
    //                }
                
    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XMInv(iter_s);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YMInv(iter_s);
    //                }
    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZMInv(iter_s);
    //                }
    //            }
                
    //        }
    //    }

    //    private void XMInv(Attribute iter_s)
    //    {
    //        foreach (Attribute impatt in iter_s.symmetry_inv)
    //        {
    //            if (!iter_s.name.Equals(impatt.name))
    //            {
    //                string s_str = impatt.name + " ↔ " + iter_s.name;
    //                //bool contained = aatw_.implied_from_listBox.Items.Contains(s_str);
    //                bool contained = false;
    //                foreach (string implication in aatw_.containedimplications)
    //                {
    //                    if (implication.Equals(s_str))
    //                    {
    //                        contained = true;
    //                        break;
    //                    }
    //                }
    //                if (contained == false)
    //                {
    //                    aatw_.containedimplications.Add(s_str);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = s_str;
    //                    cb.Content = s_str;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_symmetry_Checked));
    //                    aatw_.implied_from_listBox.Items.Add(cb);
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(iter_s, MainWindow.clusterName);
    //                foreach (string ss in iter_s.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    }                     
    //                }
    //                MisUseAnObjectsDB.loadAggregateAttributes(impatt, MainWindow.clusterName);
    //                foreach (string ss in impatt.aggregation_statements)
    //                {
    //                    bool contained_ = false;
    //                    foreach (string aggregation in aatw_.containedaggregations)
    //                    {
    //                        if (aggregation.Equals(ss))
    //                        {
    //                            contained_ = true;
    //                            break;
    //                        }
    //                    }
    //                    if (contained_ == false)
    //                    {
    //                        aatw_.containedaggregations.Add(ss);

    //                        CheckBox cb = new CheckBox();
    //                        cb.Tag = ss;
    //                        cb.Content = ss;
    //                        cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(aatw_.del_aggregation_Checked));
    //                        aatw_.att_aggregation_listBox.Items.Add(cb);
    //                    }  
    //                }

    //                if (impatt.symmetry.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XM(iter_s);
    //                }
    //                if (impatt.implied_to.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YM(iter_s);
    //                }
    //                if (impatt.implied_from.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZM(iter_s);
    //                }

    //                if (impatt.symmetry_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    XMInv(iter_s);
    //                }
    //                if (impatt.implied_to_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    YMInv(iter_s);
    //                }
    //                if (impatt.implied_from_inv.Count > 0)
    //                {
    //                    iter_s = impatt;
    //                    ZMInv(iter_s);
    //                }
    //            }

    //        }
    //    }

    //    private void aggregates_from_to_b_Click(object sender, RoutedEventArgs e)
    //    {
    //        if (imp_att_name_cb.Text == null)
    //        {
    //            MessageBox.Show("Missing attribute name...", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        else if (imp_att_name_cb.Text.Trim().Equals(""))
    //        {
    //            MessageBox.Show("Missing attribute name...", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }

    //        else if (allPrimaryCompsSelected() == false)
    //        {
    //            MessageBox.Show("unchecked property!", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        string advice = checkConflictingRelationAdvice();
    //        if (advice.Length > 0)
    //        {
    //            MessageBox.Show(this, "Selected implied relation is contradicting with \n" +
    //            "already existing relation in " + source_attribute.name + "\n\n" + advice,
    //            "Conflict", MessageBoxButton.OK, MessageBoxImage.Information);

    //            return;
    //        }

    //        MisUseAnObjectsDB.addAttributeDB(x_attribute, MainWindow.clusterName);//intermediary attribute addition
    //        //imp_att_name_cb.IsEditable = false;
    //        imp_att_name_cb.IsEnabled = false;

    //        AddAggregateFromToAttributeWindow1 aaftaw = new AddAggregateFromToAttributeWindow1(this, x_attribute);
    //        aaftaw.Owner = (Window)this.Parent;
    //        aaftaw.ShowDialog();
    //    }

    //    private void reloadAttInComboBox()
    //    {
    //        List<Attribute> attributes = MisUseAnObjectsDB.loadAllAttributes(MainWindow.clusterName);
    //        foreach (Attribute att in attributes)
    //        {
    //            imp_att_name_cb.Items.Add(att.name);
    //        }

    //    }


    //    private void reloadImpliedFromToList(Attribute iter)
    //    {
    //        implied_from_listBox.Items.Clear();
    //        att_aggregation_listBox.Items.Clear();

    //        containedimplications = new List<string>();
    //        containedaggregations = new List<string>();

    //        //add bi-directional (symmetry) items to implied_from_listBox   
    //        if (iter != null && iter.symmetry.Count > 0)
    //        {
    //            Xthis(iter);
    //            Ythis(iter);
    //            Zthis(iter);
    //        }

    //        //add uni-directional (X->Y) items to implied_from_listBox 
    //        if (iter != null && iter.implied_to.Count > 0)
    //        {
    //            Xthis(iter);
    //            Ythis(iter);
    //            Zthis(iter);
    //        }

    //        //add uni-directional (Y->X) items to implied_from_listBox  
    //        if (iter != null && iter.implied_from.Count > 0)
    //        {
    //            Xthis(iter);
    //            Ythis(iter);
    //            Zthis(iter);
    //        }

    //        //add bi-directional (symmetry) items to implied_from_listBox   
    //        if (iter != null && iter.symmetry_inv.Count > 0)
    //        {
    //            XthisInv(iter);
    //            YthisInv(iter);
    //            ZthisInv(iter);
    //        }

    //        //add uni-directional (X->Y) items to implied_from_listBox 
    //        if (iter != null && iter.implied_to_inv.Count > 0)
    //        {
    //            XthisInv(iter);
    //            YthisInv(iter);
    //            ZthisInv(iter);
    //        }

    //        //add uni-directional (Y->X) items to implied_from_listBox  
    //        if (iter != null && iter.implied_from_inv.Count > 0)
    //        {
    //            XthisInv(iter);
    //            YthisInv(iter);
    //            ZthisInv(iter);
    //        }

    //        if (iter != null && iter.implied_from.Count == 0 && iter.implied_from_inv.Count == 0
    //            && iter.implied_to.Count == 0 && iter.implied_to_inv.Count == 0
    //            && iter.symmetry.Count == 0 && iter.symmetry_inv.Count == 0)
    //        {
    //            MisUseAnObjectsDB.loadAggregateAttributes(iter, MainWindow.clusterName);
    //            foreach (string ss in iter.aggregation_statements)
    //            {
    //                bool contained_ = false;
    //                foreach (string aggregation in containedaggregations)
    //                {
    //                    if (aggregation.Equals(ss))
    //                    {
    //                        contained_ = true;
    //                        break;
    //                    }
    //                }
    //                if (contained_ == false)
    //                {
    //                    containedaggregations.Add(ss);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = ss;
    //                    cb.Content = ss;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                    att_aggregation_listBox.Items.Add(cb);
    //                }                    
    //            }
    //        }
    //    }

    //    public void reloadAggregationList(Attribute att)
    //    {
    //        att_aggregation_listBox.Items.Clear();
    //        containedaggregations = new List<string>();

    //        foreach (string agg_s in att.aggregation_statements)
    //        {
    //            if (agg_s.Length > 0)
    //            {
    //                bool contained_ = false;
    //                foreach (string aggregation in containedaggregations)
    //                {
    //                    if (aggregation.Equals(agg_s))
    //                    {
    //                        contained_ = true;
    //                        break;
    //                    }
    //                }
    //                if (contained_ == false)
    //                {
    //                    containedaggregations.Add(agg_s);

    //                    CheckBox cb = new CheckBox();
    //                    cb.Tag = agg_s;
    //                    cb.Content = agg_s;
    //                    cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_aggregation_Checked));
    //                    att_aggregation_listBox.Items.Add(cb);
    //                }
    //            }                 
    //        }
    //    }

    //    public void reloadAttributeDomainList(Attribute att)
    //    {
    //        att_domain_lb.Items.Clear();

    //        foreach (string d_s in att.domain)
    //        {
    //            bool contained = att_domain_lb.Items.Contains(d_s);
    //            if (contained == false)
    //            {
    //                CheckBox cb = new CheckBox();
    //                cb.Tag = d_s;
    //                cb.Content = d_s;
    //                cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_domain_Checked));
    //                att_domain_lb.Items.Add(cb);
    //                //att_domain_lb.Items.Add(d_s);
    //            }
    //        }
    //    }

    //    public void reloadAttTypeOfComboBox()
    //    {
    //        type_of_cb.Items.Clear();
    //        List<Attribute> attributes = MisUseAnObjectsDB.loadAllAttributes(MainWindow.clusterName);
    //        foreach (Attribute att in attributes)
    //        {
    //            type_of_cb.Items.Add(att.name);
    //        }

    //    }
    //    public void reloadAttributeTypeOfList(Attribute att)
    //    {
    //        att_type_of_lb.Items.Clear();

    //        foreach (string to_s in att.type_of)
    //        {
    //            bool contained = att_type_of_lb.Items.Contains(to_s);
    //            if (contained == false)
    //            {
    //                CheckBox cb = new CheckBox();
    //                cb.Tag = to_s;
    //                cb.Content = to_s;
    //                cb.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(del_type_of_Checked));
    //                att_type_of_lb.Items.Add(cb);
    //            }
    //        }
    //    }

    //    public void del_aggregation_Checked(object sender, RoutedEventArgs e)
    //    {
    //        CheckBox d_cb = (CheckBox)sender;
    //        string tag_id = (string)d_cb.Tag;

    //        MessageBoxResult result = MessageBox.Show(this, "delete " + tag_id,
    //                        "Confirm delete", MessageBoxButton.YesNo,
    //                        MessageBoxImage.Information);

    //        if (result == MessageBoxResult.No)
    //        {
    //            d_cb.IsChecked = false;
    //        }
    //        else
    //        {
    //            for (int i = 0; i < source_attribute.aggregation_statements.Count; i++)
    //            {
    //                if (source_attribute.aggregation_statements[i].Equals(tag_id))
    //                {
    //                    source_attribute.aggregation_statements.RemoveAt(i);
    //                    break;
    //                }
    //            }
                
    //            MisUseAnObjectsDB.deleteAggregationStatement(tag_id, MainWindow.clusterName);
    //            reloadAggregationList(source_attribute);
    //        }
    //    }

    //    private void del_domain_Checked(object sender, RoutedEventArgs e)
    //    {
    //        CheckBox d_cb = (CheckBox)sender;
    //        string tag_id = (string)d_cb.Tag;

    //        MessageBoxResult result = MessageBox.Show(this, "delete " + tag_id,
    //                        "Confirm delete", MessageBoxButton.YesNo,
    //                        MessageBoxImage.Information);

    //        if (result == MessageBoxResult.No)
    //        {
    //            d_cb.IsChecked = false;
    //        }
    //        else
    //        {
    //            for (int i = 0; i < implied_attribute.domain.Count; i++)
    //            {
    //                if (implied_attribute.domain[i].Equals(tag_id))
    //                {
    //                    implied_attribute.domain.RemoveAt(i);
    //                    break;
    //                }
    //            }
    //            MisUseAnObjectsDB.deleteConstraintAttribute(implied_attribute.name, tag_id, MainWindow.clusterName);
    //            string att_n = null;
    //            if (imp_att_name_cb.SelectedItem != null)
    //            {
    //                att_n = imp_att_name_cb.SelectedItem.ToString();
    //            }
    //            else
    //            {
    //                att_n = imp_att_name_cb.Text;
    //            }

    //            //att_n = imp_att_name_cb.Text;

    //            //if (att_n == null || att_n.Equals(""))
    //            //{
    //            //    att_n = imp_att_name_cb.SelectedItem.ToString();
    //            //}

    //            //Attribute attx = MisUseAnObjectsDB.loadAttributeFull(att_n);                
    //            reloadAttributeDomainList(implied_attribute);
    //        }
    //    }

    //    private void del_type_of_Checked(object sender, RoutedEventArgs e)
    //    {
    //        CheckBox d_cb = (CheckBox)sender;
    //        string tag_id = (string)d_cb.Tag;

    //        MessageBoxResult result = MessageBox.Show(this, "delete " + tag_id,
    //                        "Confirm delete", MessageBoxButton.YesNo,
    //                        MessageBoxImage.Information);

    //        if (result == MessageBoxResult.No)
    //        {
    //            d_cb.IsChecked = false;
    //        }
    //        else
    //        {
    //            for (int i = 0; i < source_attribute.type_of.Count; i++)
    //            {
    //                if (source_attribute.type_of[i].Equals(tag_id))
    //                {
    //                    source_attribute.type_of.RemoveAt(i);
    //                    break;
    //                }
    //            }
    //            MisUseAnObjectsDB.deleteTypeOfAttribute(source_attribute.name, tag_id, MainWindow.clusterName);
    //            type_of_cb.Text = "";
    //            reloadAttributeTypeOfList(source_attribute);
    //            reloadAttTypeOfComboBox();
    //        }
    //    }
    //    private void name_cb_selection_changed(object sender, SelectionChangedEventArgs e)
    //    {
    //        //string att_name = imp_att_name_cb.Text;
    //        //string att_name = imp_att_name_cb.SelectedItem.ToString();

    //        //string att_name = "";
    //        if (imp_att_name_cb.SelectedItem != null)
    //        {
    //            attName = imp_att_name_cb.SelectedItem.ToString();
    //        }
    //        else
    //        {
    //            attName = imp_att_name_cb.Text;
    //        }

    //        //attName = imp_att_name_cb.Text;

    //        //if (attName == null || attName.Equals(""))
    //        //{
    //        //    attName = imp_att_name_cb.SelectedItem.ToString();
    //        //}
            
    //        //Attribute attribute = null;
    //        if (attName.Count() > 0)
    //        {
    //           string attn = attName;
    //           implied_attribute = MisUseAnObjectsDB.loadAttributeFull(attn, MainWindow.clusterName);

    //           string advice = checkConflictingRelationAdvice();
    //           if (advice.Length > 0)
    //           {
    //               imp_att_name_cb.Text = "";

    //               MessageBox.Show(this, "Selected implied relation is contradicting with \n" +
    //               "already existing relation in " + source_attribute.name + "\n\n" + advice,
    //               "Conflict", MessageBoxButton.OK, MessageBoxImage.Information);

    //               return;
    //           }

    //           if (implied_attribute != null)
    //           {
    //               if (implied_attribute.personallyIdentifiable)
    //               {
    //                   per_id_rd_y.IsChecked = true;
    //               }
    //               else
    //               {
    //                   per_id_rd_n.IsChecked = true;
    //               }
    //               per_id_rd_y.IsEnabled = false;
    //               per_id_rd_n.IsEnabled = false;

    //               if (implied_attribute.literalType.Equals("[string]"))
    //               {
    //                   string_l.IsChecked = true;
    //               }
    //               else if (implied_attribute.literalType.Equals("[numeric]"))
    //               {
    //                   numeric_l.IsChecked = true;
    //               }
    //               else if (implied_attribute.literalType.Equals("[boolean]"))
    //               {
    //                   boolean_l.IsChecked = true;
    //               }
    //               string_l.IsEnabled = false;
    //               numeric_l.IsEnabled = false;
    //               boolean_l.IsEnabled = false;

    //               if (implied_attribute.category.Equals("environmentalAttribute"))
    //               {
    //                   categoryEnvironmental.IsChecked = true;
    //               }
    //               else if (implied_attribute.category.Equals("functionalAttribute"))
    //               {
    //                   categoryFunctional.IsChecked = true;
    //               }
    //               else if (implied_attribute.category.Equals("agentAttribute"))
    //               {
    //                   categoryAgent.IsChecked = true;
    //               }
    //               categoryEnvironmental.IsEnabled = false;
    //               categoryFunctional.IsEnabled = false;
    //               categoryAgent.IsEnabled = false;

    //               att_description.Text = implied_attribute.description;
    //               att_description.IsEnabled = false;

    //               //bi_directional_rb.IsEnabled = false;
    //               //source_target_bi_directional_rb.IsEnabled = false;
    //               //target_source_bi_directional_rb.IsEnabled = false;

    //               aggregates_from_to_b.IsEnabled = false;
    //               implied_from_to_b.IsEnabled = false;
    //               att_domain_b.IsEnabled = false;
    //               att_type_of_b.IsEnabled = false;
    //               type_of_cb.IsEnabled = false;

    //               reloadImpliedFromToList(implied_attribute);
    //               reloadAttributeDomainList(implied_attribute);
    //               //reloadAttTypeOfComboBox();
    //               reloadAttributeTypeOfList(implied_attribute);

    //               //MisUseAnObjectsDB.loadAggregateAttributes(attribute);
    //               //reloadAggregationList(attribute);
    //           }
    //           else
    //           {
    //               string_l.IsEnabled = true;
    //               numeric_l.IsEnabled = true;
    //               boolean_l.IsEnabled = true;

    //               per_id_rd_y.IsEnabled = true;
    //               per_id_rd_n.IsEnabled = true;

    //               categoryEnvironmental.IsEnabled = true;
    //               categoryFunctional.IsEnabled = true;
    //               categoryAgent.IsEnabled = true;
    //               att_description.IsEnabled = true;

    //               //bi_directional_rb.IsEnabled = true;
    //               //source_target_bi_directional_rb.IsEnabled = true;
    //               //target_source_bi_directional_rb.IsEnabled = true;

    //               aggregates_from_to_b.IsEnabled = true;
    //               implied_from_to_b.IsEnabled = true;
    //               att_domain_b.IsEnabled = true;
    //               att_type_of_b.IsEnabled = true;
    //               type_of_cb.IsEnabled = true;

    //               implied_from_listBox.Items.Clear();
    //               att_aggregation_listBox.Items.Clear();
    //               att_domain_lb.Items.Clear();
    //               //type_of_cb.Items.Clear();
    //               att_type_of_lb.Items.Clear();
    //           }
    //        }
    //    }

    //    private bool allPrimaryCompsSelected()
    //    {
    //        string att_n = null;
    //        if (imp_att_name_cb.SelectedItem != null)
    //        {
    //            att_n = imp_att_name_cb.SelectedItem.ToString();
    //        }
    //        else
    //        {
    //            att_n = imp_att_name_cb.Text;
    //        }

    //        //att_n = imp_att_name_cb.Text;

    //        //if (att_n == null || att_n.Equals(""))
    //        //{
    //        //    att_n = imp_att_name_cb.SelectedItem.ToString();
    //        //}

    //        att_n = att_n.Trim();
    //        att_n = att_n.TrimEnd('\n');
    //        att_n = att_n.TrimEnd('\r');

    //        string description = att_description.Text;
    //        description = description.TrimEnd('\n');
    //        description = description.TrimEnd('\r');

    //        string literal_t = "";
    //        if (string_l.IsChecked == true)
    //        {
    //            literal_t = "[string]";
    //        }
    //        else if (numeric_l.IsChecked == true)
    //        {
    //            literal_t = "[numeric]";
    //        }
    //        else if (boolean_l.IsChecked == true)
    //        {
    //            literal_t = "[boolean]";
    //        }

    //        string category_t = "";
    //        if (categoryAgent.IsChecked == true)
    //        {
    //            category_t = "agentAttribute";
    //        }
    //        else if (categoryEnvironmental.IsChecked == true)
    //        {
    //            category_t = "environmentalAttribute";
    //        }
    //        else if (categoryFunctional.IsChecked == true)
    //        {
    //            category_t = "functionalAttribute";
    //        }

    //        string isPrivate_a = "";
    //        bool ispr_a = false;
    //        if (yes_p_rd.IsChecked == true)
    //        {
    //            isPrivate_a = "true";
    //            ispr_a = true;
    //        }
    //        else if (no_p_rd.IsChecked == true)
    //        {
    //            isPrivate_a = "false";
    //            ispr_a = false;
    //        }

    //        string personallyIdentifiable_a = "";
    //        bool pid = false;
    //        if (per_id_rd_y.IsChecked == true)
    //        {
    //            personallyIdentifiable_a = "true";
    //            pid = true;
    //        }
    //        else
    //        {
    //            personallyIdentifiable_a = "false";
    //            pid = false;
    //        }
    //        if (AddActorAttributeWindow.isActorCall == true)
    //        {
    //            if (literal_t.Length > 0 && category_t.Length > 0 &&
    //                isPrivate_a.Length > 0 && personallyIdentifiable_a.Length > 0)
    //            {
    //                x_attribute = new Attribute();
    //                x_attribute.clusterName = MainWindow.clusterName;
    //                x_attribute.name = att_n;
    //                x_attribute.description = description;
    //                x_attribute.literalType = literal_t;
    //                x_attribute.category = category_t;
    //                x_attribute.isPrivate = ispr_a;
    //                x_attribute.personallyIdentifiable = pid;
    //                return true;
    //            }
    //            else
    //            {
    //                return false;
    //            }
    //        }

    //        else
    //        {
    //            if (literal_t.Length > 0 && category_t.Length > 0 &&
    //                personallyIdentifiable_a.Length > 0)
    //            {
    //                x_attribute = new Attribute();
    //                x_attribute.clusterName = MainWindow.clusterName;
    //                x_attribute.name = att_n;
    //                x_attribute.description = description;
    //                x_attribute.literalType = literal_t;
    //                x_attribute.category = category_t;
    //                x_attribute.isPrivate = ispr_a;
    //                x_attribute.personallyIdentifiable = pid;
    //                return true;
    //            }
    //            else
    //            {
    //                return false;
    //            }
    //        }
    //    }

    //    private void key_pressed_name_cb(object sender, KeyEventArgs e)
    //    {
    //        attName = imp_att_name_cb.Text; 
    //        //if (imp_att_name_cb.SelectedItem != null)
    //        //{
    //        //    attName = imp_att_name_cb.SelectedItem.ToString();
    //        //}
    //        //else
    //        //{
    //        //    attName = imp_att_name_cb.Text;
    //        //}

    //        //attName = imp_att_name_cb.Text;

    //        //if (attName == null || attName.Equals(""))
    //        //{
    //        //    attName = imp_att_name_cb.SelectedItem.ToString();
    //        //}

    //        //Attribute attribute = null;
    //        if (attName.Count() > 0)
    //        {
    //            string attn = attName;
    //            implied_attribute = MisUseAnObjectsDB.loadAttributeFull(attn, MainWindow.clusterName);
    //        }

    //        if (implied_attribute != null)
    //        {
    //            if (implied_attribute.personallyIdentifiable)
    //            {
    //                per_id_rd_y.IsChecked = true;
    //            }
    //            else
    //            {
    //                per_id_rd_n.IsChecked = true;
    //            }
    //            per_id_rd_y.IsEnabled = false;
    //            per_id_rd_n.IsEnabled = false;

    //            if (implied_attribute.literalType.Equals("[string]"))
    //            {
    //                string_l.IsChecked = true;
    //            }
    //            else if (implied_attribute.literalType.Equals("[numeric]"))
    //            {
    //                numeric_l.IsChecked = true;
    //            }
    //            else if (implied_attribute.literalType.Equals("[boolean]"))
    //            {
    //                boolean_l.IsChecked = true;
    //            }
    //            string_l.IsEnabled = false;
    //            numeric_l.IsEnabled = false;
    //            boolean_l.IsEnabled = false;

    //            if (implied_attribute.category.Equals("environmentalAttribute"))
    //            {
    //                categoryEnvironmental.IsChecked = true;
    //            }
    //            else if (implied_attribute.category.Equals("functionalAttribute"))
    //            {
    //                categoryFunctional.IsChecked = true;
    //            }
    //            else if (implied_attribute.category.Equals("agentAttribute"))
    //            {
    //                categoryAgent.IsChecked = true;
    //            }
    //            categoryEnvironmental.IsEnabled = false;
    //            categoryFunctional.IsEnabled = false;
    //            categoryAgent.IsEnabled = false;

    //            att_description.Text = implied_attribute.description;
    //            att_description.IsEnabled = false;

    //            //bi_directional_rb.IsEnabled = false;
    //            //source_target_bi_directional_rb.IsEnabled = false;
    //            //target_source_bi_directional_rb.IsEnabled = false;

    //            aggregates_from_to_b.IsEnabled = false;
    //            implied_from_to_b.IsEnabled = false;
    //            att_domain_b.IsEnabled = false;
    //            att_type_of_b.IsEnabled = false;
    //            type_of_cb.IsEnabled = false;

    //            reloadImpliedFromToList(implied_attribute);
    //            reloadAttributeDomainList(implied_attribute);
    //            //reloadAttTypeOfComboBox();
    //            reloadAttributeTypeOfList(implied_attribute);

    //            //MisUseAnObjectsDB.loadAggregateAttributes(attribute);
    //            //reloadAggregationList(attribute);
    //        }
    //        else
    //        {
    //            string_l.IsEnabled = true;
    //            numeric_l.IsEnabled = true;
    //            boolean_l.IsEnabled = true;

    //            per_id_rd_y.IsEnabled = true;
    //            per_id_rd_n.IsEnabled = true;

    //            categoryEnvironmental.IsEnabled = true;
    //            categoryFunctional.IsEnabled = true;
    //            categoryAgent.IsEnabled = true;
    //            type_of_cb.IsEnabled = true;

    //            //bi_directional_rb.IsEnabled = true;
    //            //source_target_bi_directional_rb.IsEnabled = true;
    //            //target_source_bi_directional_rb.IsEnabled = true;

    //            att_description.IsEnabled = true;

    //            aggregates_from_to_b.IsEnabled = true;
    //            implied_from_to_b.IsEnabled = true;
    //            att_domain_b.IsEnabled = true;
    //            att_type_of_b.IsEnabled = true;

    //            implied_from_listBox.Items.Clear();
    //            att_aggregation_listBox.Items.Clear();
    //            att_domain_lb.Items.Clear();
    //            //type_of_cb.Items.Clear();
    //            att_type_of_lb.Items.Clear();
    //        }
    //    }

    //    private void att_domain_b_Click(object sender, RoutedEventArgs e)
    //    {
    //        if (imp_att_name_cb.Text == null)
    //        {
    //            MessageBox.Show("Missing attribute name...", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        else if (imp_att_name_cb.Text.Trim().Equals(""))
    //        {
    //            MessageBox.Show("Missing attribute name...", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }

    //        else if (allPrimaryCompsSelected() == false)
    //        {
    //            MessageBox.Show("unchecked property!", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }

    //        string advice = checkConflictingRelationAdvice(); 
    //        if (advice.Length > 0)
    //        {
    //            MessageBox.Show(this, "Selected implied relation is contradicting with \n"+
    //            "already existing relation in " + source_attribute.name + "\n\n" + advice,
    //            "Conflict", MessageBoxButton.OK, MessageBoxImage.Information);

    //            return;
    //        }

    //        MisUseAnObjectsDB.addAttributeDB(x_attribute, MainWindow.clusterName);//intermediary attribute addition
    //        //imp_att_name_cb.IsEditable = false;
    //        imp_att_name_cb.IsEnabled = false;

    //        AddConstraintWindow acw = new AddConstraintWindow(this, implied_attribute);
    //        acw.Owner = (Window)this.Parent;
    //        acw.ShowDialog();
    //    }

    //    private void directional_rb_Checked(object sender, RoutedEventArgs e)
    //    {
    //        string advice = checkConflictingRelationAdvice();

    //        if (advice.Length > 0)
    //        {
    //            RadioButton d_cb = (RadioButton)sender;
    //            d_cb.IsChecked = false;

    //            MessageBox.Show(this, "Selected implied relation is contradicting with \n"+
    //            "already existing relation in " + source_attribute.name + "\n\n" + advice,
    //            "Conflict", MessageBoxButton.OK, MessageBoxImage.Information);

    //            return;
    //        }
    //    }

    //    private string checkConflictingRelationAdvice()
    //    {
    //        string imp_att_name = "";

    //        if (imp_att_name_cb.SelectedItem != null)
    //        {
    //            imp_att_name = imp_att_name_cb.SelectedItem.ToString();
    //        }
    //        else
    //        {
    //            imp_att_name = imp_att_name_cb.Text;
    //        }

    //        //imp_att_name = imp_att_name_cb.Text;

    //        //if (imp_att_name == null || imp_att_name.Equals(""))
    //        //{
    //        //    imp_att_name = imp_att_name_cb.SelectedItem.ToString();
    //        //}

    //        imp_att_name = imp_att_name.Trim();
    //        imp_att_name = imp_att_name.TrimEnd('\n');
    //        imp_att_name = imp_att_name.TrimEnd('\r');

    //        string advice = "";

    //        if (source_attribute != null)
    //        {
    //        foreach (Attribute imp_from in source_attribute.implied_from)
    //        {
    //            //if (imp_from.name.Equals(imp_att_name))
    //            //{
    //            //    advice = advice + source_attribute.name + " → " + imp_from.name + "\n";
    //            //    break;
    //            //}
    //            if (imp_att_name.Equals(source_attribute.name))
    //            {
    //                advice = advice + source_attribute.name  + " → " + imp_att_name+ "[NOT ALLOWED]\n";
    //                break;
    //            }
    //        }

    //        foreach (Attribute imp_to in source_attribute.implied_to)
    //        {
    //            //if (imp_to.name.Equals(imp_att_name))
    //            //{
    //            //    advice = advice + imp_to.name + " → " + source_attribute.name + "\n";
    //            //}
    //            if (imp_att_name.Equals(source_attribute.name))
    //            {
    //                advice = advice + imp_att_name + " → " + source_attribute.name + "[NOT ALLOWED]\n";
    //                break;
    //            }
    //        }

    //        foreach (Attribute sym in source_attribute.symmetry)
    //        {
    //            //if (sym.name.Equals(imp_att_name))
    //            //{
    //            //    advice = advice + sym.name + " ↔ " + source_attribute.name + "\n";
    //            //    break;
    //            //}
    //            if (imp_att_name.Equals(source_attribute.name))
    //            {
    //                advice = advice + imp_att_name + " ↔ " + source_attribute.name + "[NOT ALLOWED]\n";
    //                break;
    //            }
    //        }
    //        }


    //        return advice;
    //    }

    //    private void att_type_of_b_Click(object sender, RoutedEventArgs e)
    //    {
    //        if (imp_att_name_cb.Text == null)
    //        {
    //            MessageBox.Show("Missing attribute name...", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        else if (imp_att_name_cb.Text.Trim().Equals(""))
    //        {
    //            MessageBox.Show("Missing attribute name...", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }

    //        else if (allPrimaryCompsSelected() == false)
    //        {
    //            MessageBox.Show("unchecked property!", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        string type_of = "";
    //        if (type_of_cb.SelectedItem != null)
    //        {
    //            type_of = type_of_cb.SelectedItem.ToString();
    //        }
    //        else
    //        {
    //            type_of = type_of_cb.Text;
    //        }

    //        type_of = type_of.Trim();
    //        type_of = type_of.TrimEnd('\n');
    //        type_of = type_of.TrimEnd('\r');
    //        if (type_of.Length == 0)
    //        {
    //            MessageBox.Show("Select the type of attribute!", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        else if (type_of.Equals(source_attribute.name))
    //        {
    //            MessageBox.Show("An attribute cannot be a type of itself!", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
    //            return;
    //        }
    //        //att_name_cb.IsEditable = false;
    //        imp_att_name_cb.IsEnabled = false;
    //        att_description.IsEnabled = false;

    //        if (implied_attribute == null)
    //        {
    //            createImpliedAtt();
    //        }
    //        MisUseAnObjectsDB.addAttributeDB(implied_attribute, MainWindow.clusterName);//intermediary attribute addition
            
    //        implied_attribute.addTypeOf(type_of);
    //        MisUseAnObjectsDB.addAttributeTypeOf(implied_attribute.name, type_of, MainWindow.clusterName);
    //        reloadAttributeTypeOfList(implied_attribute);
    //    }

    //    private void createImpliedAtt()
    //    {

    //        if (implied_attribute == null)
    //        {
    //            implied_attribute = new Attribute();
    //            implied_attribute.clusterName = MainWindow.clusterName;
    //        }

    //        //string att_n = att_name_cb.Text;

    //        string att_n = null;
    //        if (imp_att_name_cb.SelectedItem != null)
    //        {
    //            att_n = imp_att_name_cb.SelectedItem.ToString();
    //        }
    //        else
    //        {
    //            att_n = imp_att_name_cb.Text;
    //        }

    //        //att_n = att_name_cb.Text;

    //        //if (att_n == null || att_n.Equals(""))
    //        //{
    //        //    att_n = att_name_cb.SelectedItem.ToString();
    //        //}

    //        att_n = att_n.Trim();
    //        att_n = att_n.TrimEnd('\n');
    //        att_n = att_n.TrimEnd('\r');

    //        string description = att_description.Text;
    //        description = description.TrimEnd('\n');
    //        description = description.TrimEnd('\r');

    //        string literal_t = "";
    //        if (string_l.IsChecked == true)
    //        {
    //            literal_t = "[string]";
    //        }
    //        else if (numeric_l.IsChecked == true)
    //        {
    //            literal_t = "[numeric]";
    //        }
    //        else if (boolean_l.IsChecked == true)
    //        {
    //            literal_t = "[boolean]";
    //        }

    //        string category_t = "";
    //        if (categoryAgent.IsChecked == true)
    //        {
    //            category_t = "agentAttribute";
    //        }
    //        else if (categoryEnvironmental.IsChecked == true)
    //        {
    //            category_t = "environmentalAttribute";
    //        }
    //        else if (categoryFunctional.IsChecked == true)
    //        {
    //            category_t = "functionalAttribute";
    //        }

    //        bool isPrivate_a;
    //        if (yes_p_rd.IsChecked == true)
    //        {
    //            isPrivate_a = true;
    //        }
    //        else
    //        {
    //            isPrivate_a = false;
    //        }

    //        bool personallyIdentifiable_a;
    //        if (per_id_rd_y.IsChecked == true)
    //        {
    //            personallyIdentifiable_a = true;
    //        }
    //        else
    //        {
    //            personallyIdentifiable_a = false;
    //        }
    //        implied_attribute.name = att_n;
    //        implied_attribute.description = description;
    //        implied_attribute.literalType = literal_t;
    //        implied_attribute.isPrivate = isPrivate_a;
    //        implied_attribute.personallyIdentifiable = personallyIdentifiable_a;
    //        implied_attribute.category = category_t;
    //    }

    }
}
